---
title: 涂鸦
icon: Shell
---

## 涂鸦的归类

涂鸦之所以设定为不可连接，是因为涂鸦非常密集，再建立连线会造成混乱和误触

## 涂鸦的用途

1. 绘制图形
2. 标注
3. 贯穿可连接实体后选中不规则区域的实体

## 绘制直线

按住shift键之后，左键拖动

如果想绘制垂直与坐标轴的直线，需要同时按住ctrl键和shift键。

## 量角器

按住shift键之后，会出现跟随鼠标的量角器

此时转动滚轮即可旋转量角器

可以配合窗口透明度调整快捷键，将此软件的窗口叠放在建筑设计图纸上，进行测量。

## 调整笔画粗细

1. 快捷键习惯：使用快捷键 `-` 和 `=` （键盘顶部）调整笔画粗细
2. PhotoShop习惯：在鼠标为涂鸦状态下，按住Alt键，鼠标右键按下并上下移动，调整笔画粗细

## 删除涂鸦

可以直接用右键斩断涂鸦笔画，也可以选中后按Delete删除。

## 扩散选择

扩散选择是涂鸦的一个特性

当涂鸦一笔画经过某些 `可连接节点` 时，选中当前的涂鸦，按默认快捷键 `ctrl + w` 可以扩散到所有这一笔画触碰到的所有 `可连接节点` 上。

进而可以快速以不规则形状选中多个实体。

同样的，当一个 `可连接节点` 和一个涂鸦有触碰时，可以先选中可连接节点，再按 `ctrl + w` 扩散到涂鸦上，也可以先选中涂鸦，再按 `ctrl + w` 扩散到可连接节点上。

甚至可以逐层扩散

## 单击填充

2025年5月8日增加实验功能：

当鼠标为涂鸦模式时，单击一个文本节点可以用当前的涂鸦颜色填充该文本节点。从而实现快速更改颜色的功能

按住shift键单击时，可以融合式填充

## 涂鸦的底层原理

涂鸦是第一个出现的不可用有向边连接的Entity。曾经的实体都是ConnectableEntity。

笔迹拥有Entity的特性，例如：可以被选中、移动、删除、复制、粘贴、放在Section框中可以被Section的拖动而连带移动。

<Callout>
问题：为什么涂鸦对象需要uuid？

答：因为涂鸦可以被放入Section中带动移动，所以为了记录这种引用关系，涂鸦必须要有uuid

</Callout>

涂鸦笔画本质上是不同粗细的折线段。（这里对笔画的定义是：绘制过程中鼠标从开始按下到松开的一笔画）

笔画的字符串结构如下：

```json
"x1,y1,w1~x2,y2,w2~x3,y3,w3 ..."
```

波浪号作为分隔符

其中为了保证字符串不会太长，每个坐标都保留两位小数，第三个参数w是笔画的粗细，取整处理

<Callout>
问题：为什么涂鸦对象的字符串化后，每一小段都要有一个粗细参数 `w`？

答：最开始打算实现笔锋的效果，进而每一小段粗细都可以不同，但后来实测发现这样会极大降低性能，频繁改变粗细的渲染会导致卡顿。

因此，为了保证性能，涂鸦的粗细按照第一小段折线的`w`参数来统一处理了

</Callout>

<Callout>
问题：既然已经不打算做笔锋效果了，为什么还要保留笔画粗细参数？

答：不排除以后还会出Godot版本，保留这个字段能和未来的Godot版本保持一致性。

</Callout>
